元注解
元注解是可以应用于其他注解的注解。来增强或者配置目标注解的机制。jdk目前提供了5个元注解。如果你需要开发自定义注解,请务必熟悉它们:
RetentionPolicy.SOURCE 这种策略下被修饰的注解只能存在于源代码中,编译后被丢弃,通过反射无法获取到被修饰的注解。
RetentionPolicy.CLASS 这种策略下被修饰的注解会被编译进字节码文件中。但是JVM无法获取到被修饰的注解。这是一个默认值,当你声明的注解没有添加任何保留策略时,会默认指定该策略。
RetentionPolicy.RUNTIME 这种策略下被修饰的注解不但可以编译进字节码文件。而且JVM也可以获取被该注解修饰的注解。而且程序编码也可以通过反射来获取被该注解修饰的注解的一些元信息。
- TYPE 只能修饰 类、接口、枚举。
- FIELD 只能修饰成员变量,包含枚举内的常量。
- METHOD 只能修饰方法。
- PARAMETER 只能修饰参数。
- CONSTRUCTOR 只能修饰构造器。
- LOCAL_VARIABLE 只能修饰局部变量。
- ANNOTATION_TYPE 只能修饰注解。
- PACKAGE 只能修饰包定义。也就是package-info.java中
- TYPE_PARAMETER java 8 新增 表示该注解能写在类型参数的声明语句中。 类型参数声明如: <T>、<T extends Person>
- TYPE_USE java 8 新增 注解可以再任何用到类型的地方使用。
@Documented 被该注解修饰的注解可以被javadoc工具提取为文档。
@Inherited 被该注解修饰的注解有继承性。这里要注意一些要点首先这种继承性体现的类之间而不是接口之间,而且注解必须是对JVM可见。也就是@Retention为RetentionPolicy.RUNTIME 才起作用。
@Repeatable java 8 新增。在此之前在同一个元素上同一个注解只能出现一次。@Repeatable可以让一个注解多次出现在一个元素上。